package com.example.cursor_orm.dao;

import com.example.cursor_orm.model.UserLog;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 用户操作日志DAO接口
 * 继承BaseDAO并添加用户日志特有的查询方法
 */
public interface UserLogDAO extends BaseDAO<UserLog> {
    
    /**
     * 根据用户ID查询用户日志列表
     * @param userId 用户ID
     * @return 用户日志列表
     */
    List<UserLog> findByUserId(Integer userId);
    
    /**
     * 根据操作类型查询用户日志列表
     * @param action 操作类型
     * @return 用户日志列表
     */
    List<UserLog> findByAction(String action);
    
    /**
     * 根据IP地址查询用户日志列表
     * @param ipAddress IP地址
     * @return 用户日志列表
     */
    List<UserLog> findByIpAddress(String ipAddress);
    
    /**
     * 根据时间范围查询用户日志列表
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 用户日志列表
     */
    List<UserLog> findByTimeRange(LocalDateTime startTime, LocalDateTime endTime);
    
    /**
     * 根据用户ID和时间范围查询用户日志列表
     * @param userId 用户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 用户日志列表
     */
    List<UserLog> findByUserIdAndTimeRange(Integer userId, LocalDateTime startTime, LocalDateTime endTime);
    
    /**
     * 根据用户ID和操作类型查询用户日志列表
     * @param userId 用户ID
     * @param action 操作类型
     * @return 用户日志列表
     */
    List<UserLog> findByUserIdAndAction(Integer userId, String action);
    
    /**
     * 删除指定时间之前的日志
     * @param beforeTime 时间点
     * @return 影响的行数
     */
    int deleteLogsBefore(LocalDateTime beforeTime);
    
    /**
     * 统计用户的操作次数
     * @param userId 用户ID
     * @return 操作次数
     */
    int countByUserId(Integer userId);
} 